/* 
描述：JwtUtil类提供了JWT(JSON Web Token)的生成和验证功能，
用于实现用户认证和权限管理，是系统安全模块的核心工具类。
完成人：吴悠
完成时间: 2025/04/26
*/
package com.jiesenhe.qacommunity.util;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.List;
import java.util.UUID;

public class JwtUtil {
    private static long time =1000 * 60 * 60 * 24 * 7;
    private static  String signature = "202231772246heyihui202231772207wuyou";
    public static String createToken(String username,String password,int type) {
        //构建jwt对象
        JwtBuilder jwtBuilder = Jwts.builder();
        //构建三个部分
        String jwtToken = jwtBuilder
                //header
                .setHeaderParam("typ", "JWT")//token类型
                .setHeaderParam("alg", "HS256")//算法使用HS256加密
                //payload载荷
                .claim("username",username)
                .claim("password", password)
                .claim("type", type)
//                .setSubject("admin")//主题（可以自定义）
                .setExpiration(new Date(System.currentTimeMillis() + time))
                .setId(UUID.randomUUID().toString())
                //signature
                .signWith(SignatureAlgorithm.HS256, signature)
                //拼接3个部分
                .compact();
        return jwtToken;
    }

    //校验token
    public static boolean checkToken(String token) {
        if (token == null){
            return false;
        }
        try {
            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(signature).parseClaimsJws(token);//解析token,得到一个包含token信息的集合
        } catch (Exception e) {
            return false;
        }
        System.out.println("checkToken Pass");
        return true;
    }

    // 检查是不是管理员
    public static boolean checkAdmin(String token) {
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(signature).parseClaimsJws(token);
        Claims body = claimsJws.getBody();
        Integer type = body.get("type", Integer.class); // 明确获取Integer类型
        if (type != null && type == 1) { // 比较整型值
            System.out.println(2222);
            return true;
        } else {
            System.out.println(3333);
            return false;
        }
    }
}
